package com.stylefeng.guns.core.http;

import com.stylefeng.guns.core.exception.GunsException;
import org.apache.http.HttpResponse;
import org.apache.http.concurrent.FutureCallback;

import java.util.Map;

/**
 * Created with IntelliJ IDEA.
 *
 * @author: wangxindong
 * @date: 2018/4/21-18:17
 */
public interface GunsHttpClient {

    // ================================================================
    // Constants
    // ================================================================

    // ================================================================
    // Fields
    // ================================================================


    // ================================================================
    // Constructors
    // ================================================================

    // ================================================================
    // Methods from/for super Interfaces or SuperClass
    // ================================================================

    // ================================================================
    // Public or Protected Methods
    // ================================================================

    /**
     * 关于方法的描述： 初始化方法
     */
    void init();

    GunsResponseVO sendHttpPost(final String httpUrl, final String request) throws GunsException;

    GunsResponseVO sendHttpPost(final String httpUrl, final String request, final boolean isCallHttps)
            throws GunsException;

    /**
     * 发送POST请求
     *
     * @param httpUrl       请求URL
     * @param headerInfoMap header信息列表（可为空）
     * @param request       请求信息
     * @param charset       编码格式（可为空）
     * @param isCallHttps   是否调用HTTPS
     * @throws GunsException
     */
    GunsResponseVO sendHttpPost(final String httpUrl, final Map<String, String> headerInfoMap,
                      final String request, final String charset, final boolean isCallHttps)
            throws GunsException;

    GunsResponseVO sendHttpPost(final String httpUrl, final Map<String, String> paramsMap) throws GunsException;

    GunsResponseVO sendHttpPost(final String httpUrl, final Map<String, String> paramsMap, final boolean isCallHttps)
            throws GunsException;

    /**
     * 发送POST请求
     *
     * @param httpUrl       请求URL
     * @param headerInfoMap header信息列表（可为空）
     * @param paramsMap     参数列表（可为空）
     * @param charset       编码格式（可为空）
     * @param isCallHttps   是否调用HTTPS
     * @throws GunsException
     */
    GunsResponseVO sendHttpPost(final String httpUrl, final Map<String, String> headerInfoMap,
                      final Map<String, String> paramsMap, final String charset, final boolean isCallHttps)
            throws GunsException;

    GunsResponseVO sendHttpGet(final String url, final Map<String, String> paramsMap) throws GunsException;

    GunsResponseVO sendHttpGet(final String url, final Map<String, String> paramsMap, final boolean isCallHttps)
            throws GunsException;

    /**
     * 发送GET请求
     *
     * @param httpUrl       请求URL
     * @param headerInfoMap header信息列表（可为空）
     * @param paramsMap     参数列表（可为空）
     * @param charset       编码格式（可为空）
     * @param isCallHttps   是否调用HTTPS
     * @throws GunsException
     */
    GunsResponseVO sendHttpGet(final String httpUrl, final Map<String, String> headerInfoMap,
                     final Map<String, String> paramsMap, final String charset, final boolean isCallHttps)
            throws GunsException;


    // ================================================================
    // Getter & Setter
    // ================================================================

    // ================================================================
    // Private Methods
    // ================================================================


    // ================================================================
    // Inner or Anonymous Class
    // ================================================================

    // ================================================================
    // Test Methods
    // ================================================================


}
